#!/bin/bash

# 显示帮助信息的函数
show_help() {
  echo "Usage: $0 [-t title_lines] [-d delimiter] [-o output_file] file1 [file2 ...]"
  echo
  echo "Options:"
  echo "  -t, --title      指定标题行数，默认为1。如果设置为0，则不跳过标题行。"
  echo "  -d, --delimiter  指定字段分隔符，默认由awk自动识别。错误指定的情况下，awk会尝试自动识别。"
  echo "  -o, --output     指定输出文件。如果不指定，结果将输出到标准输出。"
  echo "  -h, --help       显示帮助信息并退出。"
  echo
  echo "Examples:"
  echo "  默认合并两个文件："
  echo "    $0 file1.txt file2.txt > merged.txt"
  echo
  echo "  使用指定标题行数和输出文件："
  echo "    $0 -t 2 -d ',' -o merged.csv file1.csv file2.csv"
  echo
  echo "注意："
  echo "  本脚本支持.txt、.csv、.tsv等文本文件格式，不支持Excel文件(.xls或.xlsx)。"
  echo "  若文件分隔符不一致，建议在合并前统一分隔符，例如使用sed或awk命令。"
  echo "    sed 's/,/\\t/g' file.csv > file.tsv (将逗号转换为制表符)"
  echo "    awk 'BEGIN {FS=\",\"; OFS=\"\\t\"} {print \$0}' file.csv > file.tsv (同样的转换)"
}

# 默认标题行数为1
title_lines=1
# 默认分隔符变量为空
delim=""
# 默认输出文件的变量为空
output=""

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case "$1" in
        -t|--title)
          title_lines="$2"
          shift 2
          ;;
        -d|--delimiter)
          delim="$2"
          shift 2
          ;;
        -o|--output)
          output="$2"
          shift 2
          ;;
        -h|--help)
          show_help
          exit 0
          ;;
        *)
          POSITIONAL+=("$1")
          shift
          ;;
    esac
done

# 检查是否有文件名提供
if [ ${#POSITIONAL[@]} -eq 0 ]; then
    show_help
    exit 1
fi

# 创建一个新的数组用于存储支持的文件
SUPPORTED_FILES=()

# 检查文件类型并只添加支持的文件类型到新数组
for file in "${POSITIONAL[@]}"; do
    if [[ "$file" == *.xls || "$file" == *.xlsx ]]; then
      echo "Warning: Excel files (.xls, .xlsx) are not supported and will be skipped: $file" >&2
      continue
    fi
    SUPPORTED_FILES+=("$file")
done

# 检查是否有支持的文件
if [ ${#SUPPORTED_FILES[@]} -eq 0 ]; then
    echo "Error: No supported files to process."
    exit 1
fi

# 构建 awk 命令
awk_command="awk -v title_lines=$title_lines"
if [ -n "$delim" ]; then
    awk_command+=" -F'$delim' -v OFS='$delim'"
fi

# 根据 title_lines 设置，调整 awk 命令
if [ "$title_lines" -eq 0 ]; then
    awk_command+=" '{print}'"
else
    awk_command+=" 'NR==1 || FNR>title_lines {print}'"
fi

# 如果设置了输出文件，则重定向输出
if [ -n "$output" ]; then
    eval "$awk_command" "${SUPPORTED_FILES[@]}" > "$output"
else
    eval "$awk_command" "${SUPPORTED_FILES[@]}"
fi
